package evemanutool.gui.manu.components;
import java.awt.Dimension;
import java.awt.FlowLayout;
import javax.swing.BorderFactory;
import javax.swing.BoxLayout;
import javax.swing.JLabel;
import javax.swing.JPanel;
import evemanutool.data.database.Blueprint;
import evemanutool.data.database.ManuQuote;
import evemanutool.data.general.Time;
import evemanutool.gui.corp.ProductionPanel;
import evemanutool.gui.general.components.LabelBox;
import evemanutool.gui.general.components.NumberField;
import evemanutool.gui.general.components.NumberLabel;
import evemanutool.gui.manu.frameworks.InspectPanel;
import evemanutool.prefs.Preferences;
import evemanutool.prefs.Preferences.DefaultPriority;
import evemanutool.utils.calc.QuoteCalculator;
import evemanutool.utils.databases.BlueprintDB;
import evemanutool.utils.databases.CorpApiDB;
import evemanutool.utils.databases.ItemDB;
import evemanutool.utils.databases.PriceDB;
@SuppressWarnings("serial")
public class ReveseEngineeringInspectPanel extends InspectPanel {
//DB:s and prefs.
private ItemDB idb;
//Graphical components.
private NumberField runs;
private NumberLabel meLevel = new NumberLabel(false, "");
private NumberLabel peLevel = new NumberLabel(false, "");
private NumberLabel unitsPerRun = new NumberLabel(false, "");
private JLabel manuTime = new JLabel(new Time().toString());
private NumberLabel success = new NumberLabel(false, "%");
private NumberLabel t3BpcRuns = new NumberLabel(false, "");
private JLabel revTime = new JLabel(new Time().toString());
public ReveseEngineeringInspectPanel(Preferences prefs, PriceDB pdb, BlueprintDB bdb, ItemDB idb, CorpApiDB cdb, ProductionPanel prodPanel) {
super(prefs, pdb, bdb, cdb, prodPanel);
this.idb = idb;
//Top panels.
JPanel bpoPanel = new JPanel();
bpoPanel.setLayout(new BoxLayout(bpoPanel, BoxLayout.Y_AXIS));
bpoPanel.setBorder(BorderFactory.createTitledBorder("Blueprint"));
//Sub panels.
JPanel bpoSubPanel1 = new JPanel(new FlowLayout(FlowLayout.LEADING, 40, 10));
JPanel bpoSubPanel2;
//Create components.
runs = new NumberField(1, false, 0, 100000, 5);
//Bpo panel.
//First row.
bpoPanel.add(super.getHeaderRow());
//Second row.
runs.setPreferredSize(new Dimension(50, 25));
bpoSubPanel1.add(new LabelBox("Runs", runs, BoxLayout.Y_AXIS));
bpoSubPanel1.add(new LabelBox("ME", meLevel, BoxLayout.Y_AXIS));
bpoSubPanel1.add(new LabelBox("PE", peLevel, BoxLayout.Y_AXIS));
bpoSubPanel1.add(new LabelBox("Units/run", unitsPerRun, BoxLayout.Y_AXIS));
bpoSubPanel1.add(new LabelBox("Manufacture Time", manuTime, BoxLayout.Y_AXIS));
bpoPanel.add(bpoSubPanel1);
//Third row.
bpoPanel.add(super.getPriceRow());
//Fourth row.
JPanel revPanel = new JPanel(new FlowLayout(FlowLayout.LEADING, 15, 10));
revPanel.setBorder(BorderFactory.createTitledBorder("Reverse Engineering"));
//Create components.
JPanel labelBox1 = new JPanel();
labelBox1.setLayout(new BoxLayout(labelBox1, BoxLayout.Y_AXIS));
labelBox1.add(new JLabel("Success rate"));
labelBox1.add(new JLabel("T3 BPC Runs"));
labelBox1.add(new JLabel("Reverse Engineering Time"));
JPanel valueBox1 = new JPanel();
valueBox1.setLayout(new BoxLayout(valueBox1, BoxLayout.Y_AXIS));
valueBox1.add(success);
valueBox1.add(t3BpcRuns);
valueBox1.add(revTime);
//Adjust components.
success.setAlignmentX(RIGHT_ALIGNMENT);
t3BpcRuns.setAlignmentX(RIGHT_ALIGNMENT);
revTime.setAlignmentX(RIGHT_ALIGNMENT);
revPanel.add(labelBox1);
revPanel.add(valueBox1);
bpoSubPanel2 = super.getProfitRow();
bpoSubPanel2.add(revPanel);
bpoPanel.add(bpoSubPanel2);
//Fifth row.
bpoPanel.add(super.getActionRow());
//Add main panels.
add(bpoPanel);
add(super.getMaterialPanel());
//Set listeners.
assignListener(runs.getDocument());
}
@Override
protected ManuQuote initQuote(Blueprint b) {
//Init fields.
runs.setValue(1);
meLevel.setValue(b.getMe());
peLevel.setValue(b.getPe());
return QuoteCalculator.calculateReverseEngineeringQuote(modBpo, 1, null, pdb, bdb, idb, prefs,
REV_PRIO_ENUM[prefs.getDefaultPriorityIndex(DefaultPriority.REV_CALC)],
MAT_ACQUIRE_PRIO_ENUM[prefs.getDefaultPriorityIndex(DefaultPriority.MAT_CALC)]);
}
@Override
protected ManuQuote makeQuote(ManuQuote currentQuote) {
//Create Quote from fields.
if (modBpo != null && runs.isValidInput()) {
return QuoteCalculator.calculateReverseEngineeringQuote(modBpo, (int) runs.getValue(), currentQuote, pdb, bdb, idb, prefs,
REV_PRIO_ENUM[prefs.getDefaultPriorityIndex(DefaultPriority.REV_CALC)],
MAT_ACQUIRE_PRIO_ENUM[prefs.getDefaultPriorityIndex(DefaultPriority.MAT_CALC)]);
}
return null;
}
@Override
protected void updateFields(ManuQuote q) {
//Update fields and labels.
unitsPerRun.setValue(q.getBpo().getItemsPerRun());
manuTime.setText(q.getManuTime().toString());
meLevel.setValue(q.getBpo().getMe());
peLevel.setValue(q.getBpo().getPe());
//Reverse Engineering fields.
success.setValue(q.getRev().getSuccessRate() * 100);
t3BpcRuns.setValue(q.getRev().getBpcRuns());
revTime.setText(q.getRev().getRevTime().toString());
}
}